unit uCorrigeValoresUnitariosPeloPedido;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
  DbTables, Gauges, ExtCtrls;

type
  TfrmCorrigeValoresUnitariosPeloPedido = class(TForm)
    btnCorrigir: TButton;
    Panel7: TPanel;
    bp: TGauge;
    procedure btnCorrigirClick(Sender: TObject);

  private
    { Private declarations }

  public
    { Public declarations }

  end;

var
  frmCorrigeValoresUnitariosPeloPedido: TfrmCorrigeValoresUnitariosPeloPedido;

implementation

{$R *.dfm}

uses
  dm, biblio;

procedure TfrmCorrigeValoresUnitariosPeloPedido.btnCorrigirClick(Sender: TObject);
var
  qryConsultaValores:TQuery;
  qryAtualizaItens:TQuery;
  strSQL:String;
  strValor:String;

begin
  qryConsultaValores := TQuery.Create(DmInt.Db);
  qryConsultaValores.DatabaseName := DmInt.Db.DatabaseName;
  
  qryAtualizaItens := TQuery.Create(DmInt.Db);
  qryAtualizaItens.DatabaseName := DmInt.Db.DatabaseName;

  bp.Visible := true;

  try
    strSQL := 'select itnv.nota_numero, itnv.nota_serie, itnv.ent_codigo, itnv.itnv_item, ' +
              '       itnv.itnv_valorunit, itpv.itpv_valorunit ' +

              'from itemnotavenda itnv, itempedvenda itpv, backup_venda bkp, ( ' +
              '      select ( ' +
              '        case when i.Emp_Codigo in ( ' +
              '          select cod_emp ' +
              '          from controlepadrao ' +
              '        ) then ' +
              '            Ped_Numero ' +
              '          else ' +
              '            case when ( ' +
              '              Ped_Numero2 = ''000000000'' or ' +
              '              Ped_Numero2 is null or ' +
              '              Ped_Numero2 = '''' ' +
              '            ) then ' +
              '                Ped_Numero ' +
              '              else ' +
              '                Ped_Numero2 ' +
              '              end ' +

              '          end ' +

              '      ) Ped_Numero, ped_item, i.nota_serie, ' +
              '        i.nota_numero, i.ent_codigo, i.itnv_item ' +

              '      from MovItemPedVenda m, ItemNotaVenda i ' +

              '      where m.Nota_numero || m.Nota_Serie || m.Ent_Codigo || m.Itnv_Item = ' +
              '            i.Nota_numero || i.Nota_Serie || i.Ent_Codigo || i.Itnv_Item and ' +
              '            i.itnv_datafat = ''25.03.2010'' ' +

              '      order by m.nota_serie, m.nota_numero, m.ent_codigo, m.itnv_item) mov ' +

              'where (itpv.ped_numero = mov.ped_numero and ' +
              '       itpv.ped_item = mov.ped_item) and ' +
              '      (itnv.nota_numero = mov.nota_numero and ' +
              '       itnv.nota_serie = mov.nota_serie and ' +
              '       itnv.ent_codigo = mov.ent_codigo and ' +
              '       itnv.itnv_item = mov.itnv_item) and ' +
              '      (bkp.nota_numero = mov.nota_numero and ' +
              '       bkp.nota_serie = mov.nota_serie and ' +
              '       bkp.ent_codigo = mov.ent_codigo) and  ' +
              '      itnv.itnv_quantidade > 1 and ' +
              '      itnv.itnv_valorunit <> itpv.itpv_valorunit and ' +
              '      itnv.itnv_datafat = ''25.03.2010'' ';

    qryConsultaValores.Close;
    qryConsultaValores.SQL.Clear;
    qryConsultaValores.Params.Clear;
    qryConsultaValores.SQL.Add(strSQL);
    qryConsultaValores.Open;

    bp.Progress := 0;
    bp.MaxValue := qryConsultaValores.RecordCount;

    while not(qryConsultaValores.Eof) do begin
      strValor := FloatToStr(qryConsultaValores.FieldByName('itpv_valorunit').AsFloat);
      strValor := BuscaTroca(strValor, ',', '.');

      strSQL := 'update itemnotavenda ' +

                'set itnv_valorunit = ' + strValor + ' ' +

                'where nota_numero = ' + QuotedStr(qryConsultaValores.FieldByName('nota_numero').AsString) + ' and ' +
                '      nota_serie = ' + QuotedStr(qryConsultaValores.FieldByName('nota_serie').AsString) + ' and ' +
                '      ent_codigo = ' + QuotedStr(qryConsultaValores.FieldByName('ent_codigo').AsString) + ' and ' +
                '      itnv_item = ' + QuotedStr(qryConsultaValores.FieldByName('itnv_item').AsString);

      qryAtualizaItens.Close;
      qryAtualizaItens.SQL.Clear;
      qryAtualizaItens.Params.Clear;
      qryAtualizaItens.SQL.Add(strSQL);
      qryAtualizaItens.ExecSQL;

      qryConsultaValores.Next;
      bp.Progress := bp.Progress + 1;

    end;

    bp.Progress := bp.MaxValue;

  finally
    qryConsultaValores.Close;
    FreeAndNil(qryConsultaValores);
    
    qryAtualizaItens.Close;
    FreeAndNil(qryAtualizaItens);

  end;
  
end;

end.
